package com.lvtulife.paas.gtd.service;

import com.baomidou.mybatisplus.plugins.Page;
import com.lvtulife.common.bean.DelVo;
import com.lvtulife.common.service.BaseServiceI;
import com.lvtulife.paas.gtd.bean.IdealVo;
import com.lvtulife.paas.gtd.entity.GtdIdeal;

import java.util.List;

/**
 * GtdIdeal 表数据服务层接口
 */
public interface GtdIdealServiceI extends BaseServiceI<GtdIdeal> {

    /**
     * 保存理想数据
     *
     * @param vo 理想视图对象
     * @return
     */
    Long saveIdeal(IdealVo vo);

    /**
     * 更改理想状态
     * @param id
     * @param status
     */
    void changeStatus(Long id,Integer status);

    /**
     * 设置置顶
     *
     * @param id 理想ID
     */
    void topIdeal(Long id);

    /**
     * 删除理想信息(逻辑删除)
     *
     * @param delVo 删除参数
     */
    void delIdeal(DelVo delVo);

    /**
     * 批量删除理想信息(逻辑删除)
     *
     * @param delVo 删除参数
     */
    void multiDelIdeal(DelVo delVo);

    /**
     * 清空用户下所有的理想信息(物理删除)
     *
     * @param userId 系统读取Session信息写入
     */
    void clearIdeal(Long userId);

    /**
     * 排序
     *
     * @param id   待排序主键
     * @param sort 序号
     */
    void sortIdeal(Long id, Integer sort);

    /**
     * 分页查询理想信息
     *
     * @param userId 用户主键
     * @param query  分页参数
     * @return
     */
    Page<GtdIdeal> findIdealVos(Long userId, Page<GtdIdeal> query);

    /**
     * 查询所有理想信息
     * 默认按排序字段排序
     *
     * @param userId 用户主键
     * @return
     */
    List<IdealVo> findIdealVos(Long userId);

    List<GtdIdeal> findIdeals(Long userId);

    /**
     * 查询用户下指定状态的理想
     * 默认按排序字段排序
     *
     * @param userId 用户主键
     * @param status
     * @return
     */
    List<IdealVo> findStatusIdeals(Long userId, Integer status);

    /**
     * 查询用户下指定规划下的理想
     * 默认按排序字段排序
     *
     * @param userId     用户主键
     * @param strategyId 规划主键
     * @return
     */
    List<IdealVo> findStrategyIdeals(Long userId, Long strategyId);

    /**
     * 模糊查询指定用户中的理想
     *
     * @param userId
     * @param likeStr
     * @return
     */
    List<IdealVo> findLikeIdeals(Long userId, String likeStr);
}